package internal

/*
	基础发送包，可发送即时消息和延时消息
*/
import (
	"context"
	"encoding/json"
	"github.com/go-redis/redis/v8"
	"mine-info-server/global"
	"mine-info-server/utils/consts"
	"time"
)

// SendDelayMsg 发送延时消息
func SendDelayMsg(ctx context.Context, job *global.MsgJob) {
	jsonJob, _ := json.Marshal(job)
	// 先将Job信息放入pool中，再放入delaybucket中(这里可以放入lua脚本中保证同时执行)
	// 一小时后自动过期
	err := global.GVA_REDIS.Set(ctx, consts.JobPoolKey+job.ID, jsonJob, job.Delay+time.Hour).Err()
	if err != nil {
		return
	}
	global.GVA_REDIS.ZAdd(ctx, consts.PlanTimeoutDelayQueue, &redis.Z{
		Score:  float64(time.Now().Add(job.Delay).Unix()),
		Member: consts.JobPoolKey + job.ID,
	})
}

// SendInstantMsg 发送即时消息
func SendInstantMsg(ctx context.Context, job *global.MsgJob) {
	jsonJob, _ := json.Marshal(job)
	// 先将Job信息放入pool中，再放入delaybucket中(这里可以放入lua脚本中保证同时执行)
	// 给一个小时的处理时间，如果发生异常也会自动清除
	err := global.GVA_REDIS.Set(ctx, consts.JobPoolKey+job.ID, jsonJob, time.Hour).Err()
	if err != nil {
		return
	}
	global.GVA_REDIS.ZAdd(ctx, consts.PlanTimeoutDelayQueue, &redis.Z{
		Score:  float64(time.Now().Unix()),
		Member: consts.JobPoolKey + job.ID,
	})
}
